package com.neuedu.corejava.ch9;

public class ObjectClass {
	public static void main(String[] args) {
		
		//新建3个字符串，并判断是否相同
		//字符串的创建有两种方式
		String s1="abc";
		String s2=new String("abc");
		String s3=new String("abc");
		String s4="abc";
		
		System.out.println(s1==s2);
		System.out.println(s2==s3);
		System.out.println(s1==s4);
		//==运算符号在判断对象（引用数据类型时，它的功能是判断两对象的地址是否相同）
		//常量池：常量池是java语言提供的一种特殊的内存结构，用于储存程序运行过程中的常量，可以储存常量对象
	
		String s5="abcd";//字符串储存时都会在常量池中进行保存，每个不同的字符串都会有自己的储存空间
	
		//判断两个对象的数据值是否相等(部分满足)，即判断两个对象是否同一个对象应该使用equals方法
		//eqauls方法是java.lang.Object类提供的方法，用于判断两个对象是否为同一个对象或某些对象的值是否相等
		//String类重写了equals方法
		System.out.println(s1.equals(s2));
		System.out.println(s2.equals(s3));
		System.out.println(s1.equals(s4));
		
		Student student=new Student(1001,"jiang");
		Student student2=new Student(1001,"jiang");
		Student student3=student;
		//不同对象时
		System.out.println(student==student2);
		System.out.println(student.equals(student2));
		
		//指向同一对象时
		System.out.println(student3==student);
		System.out.println(student.equals(student3));
		
		//hashCode是哈希码，哈希码是通过哈希算法为每个对象计算出唯一值；即每个对象的哈希值都是不相同的
		//equals 方法默认的判断就是判断两个对象的哈希值是否相同，故equals方法默认判断的是两个对象的引用是否指向同一个对象
		System.out.println(student.hashCode());
		System.out.println(student2.hashCode());
		System.out.println(student3.hashCode());
		
		System.out.println("------------------");
		//当使用输出语句输出一个对象，默认会调用该对象的toString方法把对象转换成字符串进行输出
		//默认输出对象的：类名@hashcode（使用16进制表示）
		//如果需要输出对象的数据，需要重写toString方法
		System.out.println(student+","+student.toString());
		System.out.println(student2+","+student2.toString());
		
	}

	
}
